package com.daffodil.monitor.util;

import com.alibaba.cloud.nacos.NacosServiceInstance;
import com.daffodil.util.JacksonUtils;
import com.daffodil.util.StringUtils;

import cn.hutool.http.HttpUtil;

/**
 * -指标工具集
 * @author yweijian
 * @date 2022年10月13日
 * @version 2.0.0
 * @description
 */
public class MetricsUtils {
    
    /**
     * -获取监控信息指标数据:first
     * @param instance 服务实例
     * @param metricsName 指标名称
     * @param index 序号
     * @return
     */
    public static Number getMetricsDataOfNumber(NacosServiceInstance instance, String metricsName) {
        MetricsData data = getMetricsData(instance, metricsName);
        if(StringUtils.isNotNull(data) && StringUtils.isNotEmpty(data.getMeasurements())) {
            return data.getMeasurements().get(0).getValue();
        }
        return 0;
    }
    
    /**
     * -获取监控信息指标数据
     * @param instance 服务实例
     * @param metricsName 指标名称
     * @return 指标数据
     */
    public static MetricsData getMetricsData(NacosServiceInstance instance, String metricsName) {
        if(StringUtils.isNotNull(instance) && StringUtils.isNotEmpty(instance.getMetadata())) {
            String host = instance.getHost();
            String port = instance.getMetadata().get("management.port");
            String basePath = instance.getMetadata().get("management.endpoints.web.base-path");
            if(StringUtils.isNotEmpty(port) && StringUtils.isNotEmpty(basePath)) {
                String url = StringUtils.format("http://{}:{}{}/metrics/{}", host, port, basePath, metricsName);
                String response = HttpUtil.get(url);
                if(StringUtils.isNotEmpty(response)) {
                    return JacksonUtils.toJavaObject(response, MetricsData.class);
                }
            }
        }
        return null;
    }
}
